package cn.nuc.edu.onlinestore.service.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import cn.nuc.edu.onlinestore.dao.RoleMapper;
import cn.nuc.edu.onlinestore.entity.SysFunction;
import cn.nuc.edu.onlinestore.entity.Sysrole;
import cn.nuc.edu.onlinestore.service.interfaces.IRoleService;
import cn.nuc.edu.onlinestore.util.PageControl;
import cn.nuc.edu.onlinestore.util.Pager;

/**
 * 角色业务逻辑实现
 * @author 王凯
 *
 */
@Service
public class RoleService implements IRoleService {

	/**
	 * 角色映射器
	 */
	@Autowired
	private RoleMapper dao;
	
	/**
	 * 分页查询
	 */
	public Pager<Sysrole> list(Sysrole role, PageControl pc) {
		//获取封装的分页参数
		Map<String, Object> paramMap = new HashMap<>();
		paramMap.put("currentindex", pc.getCurrentindex());
		paramMap.put("pagesize", pc.getPagesize());
		paramMap.put("rolename", role.getRolename());
		
		//获得总记录数
		Integer count = dao.getAllCount();
		
		//执行分页查询操作
		List<Sysrole> rolelist = dao.list(paramMap);
		
		//封装分页信息
		Pager<Sysrole> pager = new Pager<>();
		pager.setList(rolelist);
		pc.setRscount(count);
		pager.setPagectrl(pc);
		
		return pager;
	}

	/**
	 * 添加角色
	 */
	@Transactional
	public Integer add(Sysrole role) {
		return dao.add(role);
	}

	/**
	 * 初始化功能列表
	 */
	public List<SysFunction> initfunlist(Sysrole role) {
		return dao.initfunlist(role);
	}

	/**
	 * 查询角色的详细信息
	 */
	public Sysrole detail(Sysrole role) {
		return dao.detail(role);
	}

	/**
	 * 保存用户的权限（要求事务）
	 */
	@Transactional
	public Integer saveright(Integer roleid, Integer[] funids) {
		
		Integer rtn = 1;
		
		//1.删除旧的角色权限
		rtn = dao.deleteoldright(roleid);
		
		//2.添加新的角色权限
		if (funids != null && funids.length != 0) {
			for (Integer funid : funids) {
				Map<String, Object> paramMap = new HashMap<>();
				paramMap.put("roleid", roleid);
				paramMap.put("funid", funid);
				rtn = dao.addnewright(paramMap);
				if (rtn == 0) {
					throw new RuntimeException("添加权限出错");
				}
			}
		}

		return rtn;
	}

	/**
	 * 修改角色信息
	 */
	@Transactional
	public Integer edit(Sysrole role) {
		return dao.edit(role);
	}
	
	/**
	 * 获取系统角色列表(全部，不分页)
	 * @return 查询结果
	 */
	public List<Sysrole> listAll() {
		return dao.listAll();
	}
	
}
